package br.com.devmedia.temppos.repository;

import java.util.List;

import javax.persistence.EntityManager;

import br.com.devmedia.temppos.domain.Setor;
import br.com.devmedia.temppos.persistence.CriaDomainSistema;
import br.com.devmedia.temppos.utils.ConfiguraMensagemErro;
import br.com.devmedia.temppos.utils.ConfiguradorMensagensSistema;

public class SetorDao {
	
	private EntityManager entityManager;
	private List<Setor> listarSetor;
	
	public SetorDao() {
		this.entityManager = CriaDomainSistema.getEntityManager();
		this.listarSetor = this.entityManager.createQuery("from Setor order by nome").getResultList();
	}
	
	/***
	 * Responsavel por listar os dados da entidade. 
	 * 
	 * @return
	 */
	public List<Setor> listarSetor() {
		return this.entityManager.createQuery("from Setor order by nome").getResultList();
	}
	
	/***
	 * Responsavel por Salvar os dados da entidade. 
	 * 
	 * @return
	 */
	public Boolean salvar(Setor setor) {
		try{
			entityManager.getTransaction().begin();
			if(setor.getCodigo() == null) {
				entityManager.persist(setor);
			} else {
				entityManager.merge(setor);
			}
			entityManager.getTransaction().commit();
			ConfiguradorMensagensSistema.mensagemInformacao("Setor persistido com Sucesso!");
			
		}catch(Exception exception) {
			if(entityManager.getTransaction().isActive() == false) {
				entityManager.getTransaction().begin();
			}
			entityManager.getTransaction().rollback();
			ConfiguradorMensagensSistema.mensagemErro("Erro ao tentar persistir o objeto: " + ConfiguraMensagemErro.getMensagemErroSistema(exception));
		}
		return false;
	}
	
	/***
	 * Responsavel por Exluir os dados da entidade Setor. 
	 * 
	 * @return
	 */
	public void excluir(Setor setorParametro) {
//		try {
//				if(setorParametro.getCodigo() != null) {
					entityManager.remove(setorParametro);
//				} 
//				else {
//					entityManager.merge(setorParametro);
//				}
			entityManager.getTransaction().commit();
			ConfiguradorMensagensSistema.mensagemInformacao("Setor Excluido com Sucesso!");	
//		}catch(Exception exception) {
//			if(entityManager.getTransaction().isActive() == false) {
//				entityManager.getTransaction().begin();
//			}
//			entityManager.getTransaction().rollback();
//			ConfiguradorMensagensSistema.mensagemErro("Erro ao tentar Excluir o objeto: " + ConfiguraMensagemErro.getMensagemErroSistema(exception));
//		}
	}
	
	/***
	 * Responsavel por Pesquisar pelo Codigo os dados da entidade Setor. 
	 * 
	 * @return
	 */
	public Setor pesquisarCodigo(Long codigoParametro) {
		return entityManager.find(Setor.class, codigoParametro);
	}
	
	public EntityManager getEntityManager() {
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}

	public List<Setor> getListarSetor() {
		return listarSetor;
	}

	public void setListarSetor(List<Setor> listarSetor) {
		this.listarSetor = listarSetor;
	}
}